题一:
判断字符串中有无重复的字符
import java.util.Scanner;
/**
* 思路:
* 判断编码形式为ascii还是其他编码形式,ascii的字符集为128个,扩展后为256个,数量不大
* 将字符转换为整数,在数组里判断是否存在
*/
public class case1_判断字符串有无重复的字符 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String str = in.next();
//System.out.println(str);
boolean is = checkDifferent(str);
System.out.println(is);
}
private static boolean checkDifferent(String str) {
// 判断是否为空
if (str.isEmpty()) {
return false;
}
// 辅助数组
int[] help = new int[128];
// 遍历数组
for (int i=0;i<str.length();i++) {
// 将字符串中的数组转换为int
int num = (int) str.charAt(i);
if (help[num]>0) {
return false;
} else {
help[num]++;
}
}
return true;
}
}
题二:
翻转字符串
package com;
import java.util.Scanner;
/**
* 思路:
* java直接调用API,String是不可以改变的,将String改为StringBuffer,StringBuffer.reverse.toString();
* 字符就是创建一个新数组,String倒序存入新数组,然后new String(字符数组);
*/
public class case2_翻转字符串 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String str = in.next();
reverse(str);
}
private static void reverse(String str) {
StringBuffer sb = new StringBuffer(str);
System.out.println(sb.reverse().toString());
}
}
题三:
判断两个词是否互为变形词(变形词:两个字符串有相同的字符和数量组成)
package com;
import java.util.Arrays;
/**
* 题意:变形词,两个字符串有相同的字符和数量组成
* 思路:java,将字符串变为字符数组,然后对字符数组排序,对两个字符数组进行比较
* 使用一个256的辅助数组
*/
public class case3_变形词 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "asdffqwe";
String str2 = "dqweasff";
if (checkSam(str1,str2)) {
System.out.println(str1+"与"+str2+"互为变形词");
} else {
System.out.println("不是变形词");
}
}
private static boolean checkSam(String str1,String str2) {
// 初始判断,如果两个字符串长度都不相等,就没有在比较的意义了
if (str1.length() != str2.length()) {
return false;
}
// 将String转为字符数组
char[] str11 = str1.toCharArray();
char[] str22 = str2.toCharArray();
Arrays.sort(str11);
Arrays.sort(str22);
return Arrays.equals(str11, str22);
}
}
题四:
将字符串中的空格替换为给定的字符
package com;
/**
* 思路:调用java中String的api接口replaceAll进行替换
*/
public class case4_将空格替换为 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(replace("qwe asd zxc",11));
}
private static String replace(String str,int len) {
return str.replaceAll(" ","%20");
}
}
题五:
压缩字符串
package com;
/**
* 利用字符重复出现的次数,编写一个方法,实现最基本的字符串压缩功能
* 比如:字符串"aabcccccaaa",经压缩转变为"a2bc5a3"
* 若压缩后的字符串没有变短,则返回原来的字符串
*/
import java.util.Scanner;
public class case5_字符串压缩 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 接收输入值
Scanner in = new Scanner(System.in);
String src = in.next();
// 判断输入的字符串是否为空
if (src.length() == 0) {
return;
}
// 调用压缩字符串方法对字符串进行压缩
String ys = zipString(src);
System.out.println(ys);
}
private static String zipString(String src) {
// 对字符串进行压缩
int count = 1; // 相同字符的数量,肯定有一个字符
int last = 0; // 该字符的位置,后面的字符与它进行判断
StringBuilder sb = new StringBuilder();
sb.append(src.charAt(0));
for (int i=1;i<src.length();i++) {
if (src.charAt(last) == src.charAt(i)) {
count++;
continue;
} else {
if (count != 1) {
sb.append(count);
count=1;
}
sb.append(src.charAt(i));
last=i;
continue;
}
}
// 给最后一个字符填值
if (count != 1) {
sb.append(count);
}
// 判断字符串是否压缩
if (src.length() == sb.toString().length()) {
return src;
}
return sb.toString();
}
}
题六
判断两字符串的字符集是否相同
package com;
import java.util.HashMap;
import java.util.Map;
public class case6_判断两字符串的字符集是否相同 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "qweasdf";
String str2 = "fdsaew";
boolean flag = check(str1,str2);
System.out.println(flag);
}
/**
* 这样写是有限制的,只可以是ASCII字符,改变了就不可以了
* BUG:
* str2字符集全在str1中,str1中有部分字符集str2没有,也是true
*/
private static boolean check(String str1,String str2) {
int[] help = new int[256];
for (int i=0;i<str1.length();i++) {
if (help[str1.charAt(i)] != 1) {
help[str1.charAt(i)] = 1;
}
}
for (int i=0;i<str2.length();i++) {
if (help[str2.charAt(i)] != 1) {
return false;
}
}
return true;
}
/**
* 使用HashMap集合可以是字符不仅仅只限于ASCII,这种方法BUG依然存在
*/
private static boolean check2(String str1,String str2) {
Map<Character, Integer> map = new HashMap<>();
for (int i=0;i<str1.length();i++) {
if (map.get(str1.charAt(i)) == null) {
map.put(str1.charAt(i),1);
}
}
for (int i=0;i<str2.length();i++) {
if (map.get(str2.charAt(i)) == null) {
return false;
}
}
return true;
}
}
题七:
旋转词
package com;
/**
* 调用了java的API .contains
*
*/
public class case7_旋转词 {
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean flag = isRotate("erdssdfwq", "sdfwqerds");
System.out.println(flag);
}
private static boolean isRotate(String str1,String str2) {
// 要是旋转词,长度必须一致
if (str1.length() != str2.length()) {
return false;
}
// 将两个字符串拼接
String p = str2+str2;
return p.contains(str1);
}
}
题八:
翻转字符串中的单词
package com;
/**
* 先将字符串翻转,然后在按单词分割,将单词重新翻转过来
*
*/
public class case8_翻转字符串中的单词 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String src = "here you are";
// 先将字符串整体翻转
String reverseSrc = reverseString(src);
// 将字符串中的单词分割出来
String[] rstrs = reverseSrc.split(" ");
StringBuilder sb = new StringBuilder();
for (int i=0;i<rstrs.length;i++) {
String str = reverseString(rstrs[i]);
sb.append(str+" ");
}
// 最后一个有空格,将空格去掉
String Src = sb.deleteCharAt(sb.length()-1).toString();
System.out.println(Src);
}
// 翻转字符串
private static String reverseString(String str) {
StringBuilder sb = new StringBuilder(str);
return sb.reverse().toString();
}
}
题九:
移除字符串中出现的连续k个0
package com;
public class case9_移除k个0 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "10000000200030040";
String str1 = removeZero1(str, 3);
System.out.println(str1);
}
/**
* 使用正则表达式的方式进行删除
*/
private static String removeZero(String str,int k) {
String regexp = "0{"+k+"}";
return str.replaceAll(regexp, "");
}
/**
* 将String转换为字符数组的方法取解决
*/
private static String removeZero1(String str,int k) {
// 将String转换为char数组
char[] str1 = str.toCharArray();
StringBuilder sb = new StringBuilder();
int count = 0;
for (int i=0;i<str.length();i++) {
char c = str1[i];
if (c == '0') {
count++;
}else {
for (int j=0;j<count%k;j++) {
sb.append('0');
}
sb.append(c);
count=0;
}
}
for (int j=0;j<count%k;j++) {
sb.append('0');
}
return sb.toString();
}
}
题10:
回文串
package com;
public class case10_回文串 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "asddsa";
boolean flag = isPalindrome(str);
System.out.println(flag);
}
private static boolean isPalindrome(String str) {
if (str.length()==0) {
return true;
}
StringBuilder sb = new StringBuilder(str);
return str.equals((sb.reverse().toString()));
}
}
练习题:
package com;
/**
* 输出0-9999以内的所有回文数
*
*/
public class case11_回文数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i=1;i<10;i++) {
for (int j=0;j<10;j++) {
System.out.println(i*1000+j*100+j*10+i);
}
}
}
}