public class URLhua { public static void main(String[] args) { Scanner input = new Scanner(System.in); String s=input.nextLine(); int length=input.nextInt(); System.out.println(replaceSpaces(s,length)); }
public class HuiWenPaiLie { public static void main(String[] args) { Scanner input = new Scanner(System.in); String s=input.next(); System.out.println(canPermutePalindrome(s)); }
public static boolean canPermutePalindrome(String s) { Set<Character> set = new HashSet<>(); for(char c:s.toCharArray()) { if (!set.add(c)) { //如果c字符不能添加就说明是重复出现 set.remove(c); //移除第一次添加的c字符 } } return set.size()<=1; //看最后是不是只有那个奇数的一个/全是偶数的被移除了 }
public class StringYaSuo { public static void main(String[] args) { Scanner input = new Scanner(System.in); String s=input.nextLine(); System.out.println(compressString(s));
public class ErjinzhizhuanString { public static void main(String[] args) { Scanner input = new Scanner(System.in); Double num=input.nextDouble(); System.out.println(printBin(num)); }
public class KuoHao { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n=input.nextInt(); System.out.println(generateParenthesis(n)); //调用方法 }
public static List<String> generateParenthesis(int n) { List<String> res=new ArrayList(); //特定判断 if (n == 0) { return res; } //执行深度优先遍历 dfs("",n,n,res);
return res; }
/** * @param curStr 当前递归得到的结果 * @param left 左括号还有几个可以使用 * @param right 右括号还有几个可以使用 * @param res 结果集 */ private static void dfs(String curStr, int left, int right, List<String> res) { //因为每一次尝试,都使用新的字符串变量,所以无需回溯 if(left==0&&right==0){ res.add(curStr); // 在递归终止的时候,直接把它添加到结果集即可 return ; //void不需要返回 }
// 剪枝(左<右就符合左边用的多这样不需要剪枝) if (left > right) { return; //void不需要返回 }
public class JiSuanQi { public static void main(String[] args) { Scanner input = new Scanner(System.in); String s=input.next(); System.out.println(calculate(s)); }
public class ZuiChangDanCi { public static void main(String[] args) { Scanner input = new Scanner(System.in); String s=input.nextLine(); System.out.println(reverseWords(s)); }
public static String reverseWords(String s) { String[] strs = s.trim().split(" "); // 删除首尾空格,分割字符串 StringBuilder res = new StringBuilder(); for(int i = strs.length - 1; i >= 0; i--) { // 倒序遍历单词列表 if(strs[i].equals("")){ continue; // 遇到空单词则跳过 } res.append(strs[i]+" "); // 将单词拼接至 StringBuilder } return res.toString().trim(); // 转化为字符串,删除尾部空格,并返回 }
public class ZuoXuanZhuanString { public static void main(String[] args) { Scanner input = new Scanner(System.in); String s=input.nextLine(); int n=input.nextInt(); System.out.println(reverseLeftWords(s,n)); }
public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); String s=input.next(); int n=input.nextInt(); System.out.println(convert(s,n)); }
public static String convert(String s, int numRows) { if(numRows<2){ //如果是0行或者1行 就直接输出s即可 return s; } //存储每一行的字符(要拼接所以要用StringBuilder类) List<StringBuilder> rows = new ArrayList<StringBuilder>(); //根据行数每行添加一个StringBuilder for(int i=0;i<numRows;i++){ rows.add(new StringBuilder()); //每一行都有一个 } int i=0; int flag=-1; for(char c:s.toCharArray()){ rows.get(i).append(c); //对应行添加进去字符 if(i==0||i==numRows-1){ flag=-flag; //到了拐角要变换flag } i=i+flag; //1的话就是往下加 -1的话就是往上加 } StringBuilder res = new StringBuilder(); //新建接住结果 for(StringBuilder row:rows) { res.append(row); //添加每一行的结果集合 } return res.toString();//最后记得转字符串 }
public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println(Arrays.toString(shortestToChar("loveleetcode",'e'))); }
public static int[] shortestToChar(String S, char C) { int N = S.length(); //获取字符串长度 int[] ans = new int[N]; //返回结果的ans数组
int prev=Integer.MIN_VALUE/2; //先取负数 //从左往右取结果 for (int i = 0; i < N; ++i) { //正序 if (S.charAt(i) == C) prev = i; ans[i] = i - prev; //找到相近的字符的距离 } //从右往左取结果 prev = Integer.MAX_VALUE / 2; //先取正数 for (int i = N-1; i >= 0; --i) { //倒序 if (S.charAt(i) == C) prev = i; ans[i] = Math.min(ans[i], prev - i); //找到相近的字符的距离 } return ans; //返回ans数组 }
}
结果
删除回文子序列(因为只有a和b字符)
题目
分析
代码
1 2 3 4 5 6 7 8 9 10
public int removePalindromeSub(String s) { if ("".equals(s)) { return 0; //空字符串 } if (s.equals(new StringBuilder(s).reverse().toString())){ return 1; //本身就是回文串 } return 2; //其他情况就是一次性删除所有a 然后删除b }
结果
字符串的最大公因子(辗转相除法)
题目
分析
使用辗转相除法得到最大公因子!!!
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public String gcdOfStrings(String str1, String str2) { // 假设str1是N个x,str2是M个x,那么str1+str2肯定是等于str2+str1的。 if (!(str1 + str2).equals(str2 + str1)) { return ""; } int l1=str1.length(); int l2=str2.length(); // 辗转相除法求gcd。 return str1.substring(0, gcd(l1, l2)); //截取str1的部分字符串 }
public static int gcd(int a, int b) { return b == 0? a: gcd(b, a % b); //b是0就返回a b不是0就返回a%b }
public String reverseOnlyLetters(String S) { Stack<Character> letters = new Stack(); for (char c: S.toCharArray()) if (Character.isLetter(c)) letters.push(c); //所有数字反序压栈
StringBuilder ans = new StringBuilder();
//第二次再次遍历 for (char c: S.toCharArray()) { if (Character.isLetter(c)) ans.append(letters.pop()); //如果当前位是字母 就出栈 刚好是反序 else ans.append(c); //特殊位置继续放入当前位置 }